package com.wxzl.community.common.base

import android.annotation.SuppressLint
import android.content.Intent
import android.os.Bundle
import android.view.MenuItem
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.observe
import com.alibaba.android.arouter.launcher.ARouter
import com.drake.brv.PageRefreshLayout
import com.gyf.immersionbar.ImmersionBar
import com.kongzue.dialogx.dialogs.WaitDialog
import com.wxzl.community.common.R
import com.wxzl.community.common.router.PathConfig
import com.wxzl.community.common.utils.ext.showToast

/***
 * 使用databinding的activity抽像类
 */
abstract class ActivityVM<VM : ViewModelBase>  : AppCompatActivity() {
    val vm by lazy { ViewModelProvider(this).get(vmClass) }
    abstract val vmClass: Class<VM>
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
//        ARouter.getInstance().inject(this)
        initView()
        supportActionBar?.elevation=0f
        supportActionBar?.setDisplayHomeAsUpEnabled(true)

        initEvent()
        initImmersiveStatusBar()
        observe()

    }



    open fun initEvent() { }


    open fun observe() {
        //统一显示错误消息
        vm.api_err.observe(this) {
            showToast(it)
            showPageError()
        }
        vm.service_err.observe(this) {
            showToast("服务器开小差了")
            showPageError()
        }
        vm.network_err.observe(this) {
            if (it) showToast(R.string.network_error)
            showPageError()
        }

        vm.nulldata_err.observe(this) {
            showPageEmpty()
        }

        vm.showProgress.observe(this, Observer {
            if (it) showProgressDialog() else hideProgressDialog()
        })

        vm.submitResult.observe(this, Observer {
            if (it) onOk()
        })
        vm.err4033.observe(this) {

//            ARouter.getInstance().build(PathConfig.login).
//            withFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK or Intent.FLAG_ACTIVITY_NEW_TASK).navigation()
        }

        vm.token_exception.observe(this) {
            if (it)
                ARouter.getInstance().build(PathConfig.login).withFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK or Intent.FLAG_ACTIVITY_NEW_TASK).navigation()
        }


    }


    open fun initView() {}
    open fun onOk() {}
    fun showProgressDialog() {

        WaitDialog.show("等待...")
    }

    fun hideProgressDialog() {
        WaitDialog.dismiss()
    }



    /**
     * 设置沉浸式状态栏
     * @param colorResId 状态栏颜色
     */

    open fun initImmersiveStatusBar() {
        ImmersionBar.with(this).statusBarDarkFont(true).fitsSystemWindows(true)
                .statusBarColor(R.color.backgroundColor).init()


    }
    /**
     * 设置沉浸式状态栏
     * @param colorResId 状态栏颜色
     */

    fun initImmersiveStatusBar(color: Int) {
        ImmersionBar.with(this).statusBarDarkFont(true)
                .statusBarColor(color).init()

    }


    /**
     * 设置沉浸式状态栏
     * @param colorResId 状态栏颜色
     */

    fun initImmersiveStatusBar(color: Int, isDarkFont: Boolean, textColor: Int? = null) {
        ImmersionBar.with(this).statusBarDarkFont(isDarkFont)
                .statusBarColor(color).init()





    }







    /**
     * 获取页面中的PageRefreshLayout
     */
     abstract fun findPageRefreshLayout(): PageRefreshLayout?

    /**
     * 显示错误页面
     */
    private fun showPageError(){
        val pageLayout = findPageRefreshLayout()
        pageLayout?.showError()
    }

    /**
     * 显示空页面
     */
    open fun showPageEmpty(){
        val pageLayout = findPageRefreshLayout()
        pageLayout?.showEmpty()
    }


    override fun onOptionsItemSelected(item: MenuItem): Boolean {
        val id: Int = item.itemId
        if (id == android.R.id.home) {
            finish()
            return true
        }
        return super.onOptionsItemSelected(item)
    }


}